package co.gov.medellin.ssti.sub.service;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Collection;

import javax.naming.NamingException;

import co.gov.medellin.ssti.sub.common.ConexionFactory;
import co.gov.medellin.ssti.sub.model.dao.DAOFactory;
import co.gov.medellin.ssti.sub.model.dao.IModificarBOTDAO;
import co.gov.medellin.ssti.sub.model.dao.exception.DAOException;
import co.gov.medellin.ssti.sub.model.vo.AtributoVO;
import co.gov.medellin.ssti.sub.model.vo.ModificarBOTVO;

public class ModificarBOTService {

	/**
	 * 
	 * @param codeSubpro
	 * @return
	 * @throws DAOException
	 */
	public Collection<AtributoVO> findAtributosSubpro(String codeSubpro)
			throws DAOException {
		IModificarBOTDAO modificarBOTDAO = null;
		try {
			Connection con = ConexionFactory.getInstance().getConnection();
			modificarBOTDAO = DAOFactory.getDAOFactory(DAOFactory.ORACLE)
					.getModificarBOTDAO(con);
			return modificarBOTDAO.findAtributosSubpro(codeSubpro);
		} catch (NamingException e) {
			throw new DAOException(e);
		} catch (SQLException e) {
			throw new DAOException(e);
		} finally {
			if (modificarBOTDAO != null) {
				if (!modificarBOTDAO.isConnClosed()) {
					modificarBOTDAO.close();
				}
			}
		}
	}

	/**
	 * Consulta en base de datos la sede que otorgo un beneficio.
	 * 
	 * @param codeBot
	 *            Codigo del beneficio otorgado.
	 * @return String con el nombre de la sede.
	 * @throws SQLException
	 */
	public String findSedeOtorgamientoByCodBot(String codeBot)
			throws DAOException {
		IModificarBOTDAO modificarBOTDAO = null;
		try {
			Connection con = ConexionFactory.getInstance().getConnection();
			modificarBOTDAO = DAOFactory.getDAOFactory(DAOFactory.ORACLE)
					.getModificarBOTDAO(con);
			return modificarBOTDAO.findSedeOtorgamientoByCodBot(codeBot);
		} catch (NamingException e) {
			throw new DAOException(e);
		} catch (SQLException e) {
			throw new DAOException(e);
		} finally {
			if (modificarBOTDAO != null) {
				if (!modificarBOTDAO.isConnClosed()) {
					modificarBOTDAO.close();
				}
			}
		}
	}

	/**
	 * Consulta en base de datos el atributo.
	 * 
	 * @param tipodato
	 * @param codebene
	 * @param codeAtri
	 * @return
	 * @throws SQLException
	 */
	public String findBeneficiarioAtri(String tipodato, String codebene,
			String codeAtri) throws DAOException {
		IModificarBOTDAO modificarBOTDAO = null;
		try {
			Connection con = ConexionFactory.getInstance().getConnection();
			modificarBOTDAO = DAOFactory.getDAOFactory(DAOFactory.ORACLE)
					.getModificarBOTDAO(con);
			return modificarBOTDAO.findBeneficiarioAtri(tipodato, codebene,
					codeAtri);
		} catch (NamingException e) {
			throw new DAOException(e);
		} catch (SQLException e) {
			throw new DAOException(e);
		} finally {
			if (modificarBOTDAO != null) {
				if (!modificarBOTDAO.isConnClosed()) {
					modificarBOTDAO.close();
				}
			}
		}
	}

	/**
	 * Consulta en base de datos el valor y codigo de TCS_BEN_BENEFICIO_ATRIBUTO
	 * 
	 * @param tipoDato
	 *            Tipo de dato. "N" retorna VALOR_NUM_ATR. "F" retorna
	 *            VALOR_FEC_ATR. Otro tipo retorna VALOR_CAR_ATR.
	 * @param codeBeneOtor
	 *            Codigo del beneficio otorgado.
	 * @param codeAtri
	 *            Codigo del atributo (SAB_CODIGO).
	 * @return ModificarBOTVO con atributos valor y codigo.
	 * @throws SQLException
	 */
	public ModificarBOTVO findBeneficioAtri(String tipoDato,
			String codeBeneOtor, String codeAtri) throws DAOException {
		IModificarBOTDAO modificarBOTDAO = null;
		try {
			Connection con = ConexionFactory.getInstance().getConnection();
			modificarBOTDAO = DAOFactory.getDAOFactory(DAOFactory.ORACLE)
					.getModificarBOTDAO(con);
			return modificarBOTDAO.findBeneficioAtri(tipoDato, codeBeneOtor,
					codeAtri);
		} catch (NamingException e) {
			throw new DAOException(e);
		} catch (SQLException e) {
			throw new DAOException(e);
		} finally {
			if (modificarBOTDAO != null) {
				if (!modificarBOTDAO.isConnClosed()) {
					modificarBOTDAO.close();
				}
			}
		}
	}
}
